package ar.edu.unju.fi.reservahabitaciones.grupo14.struts.actions;

import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.forms.HabitacionAbmForm;
import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.modelo.dao.CategoriaDao;
import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.modelo.dao.HabitacionDao;
import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.modelo.dominio.Categoria;
import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.modelo.dominio.Habitacion;
import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.modelo.dominio.TipoHabitacion;
import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.spring.servicios.ServicioFacade;
import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.spring.servicios.SpringUtil;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.hibernate.exception.ConstraintViolationException;

/**
 *
 * @author José Zapana
 */
public class HabitacionAbmAction extends DispatchAction {
      ActionErrors errors = new ActionErrors();
    /* forward name="success" path="" */
    private final static String SUCCESS = "success";
    private final static String ERROR = "error";
    ServicioFacade servicio = (ServicioFacade) SpringUtil.getBean("servicioFacade");

    /**
     * Método Struts action llamado desde
     * habitacionAbm.do?event=beforeInsert", donde "event" es el valor
     * especificado en <action> elemento : ( <action parameter="event" .../> )
     */
    public ActionForward beforeInsert(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
         HabitacionAbmForm habitacionAbmForm = (HabitacionAbmForm) form;
      

        /*
         * aplicacion de spring facade Tp07
         */
        HabitacionDao habitacionDao = servicio.getHabitacionDao();
        List<TipoHabitacion> tipoHabitaciones = habitacionDao.getTipoHabitaciones();
        request.setAttribute("tipoHabitaciones", tipoHabitaciones);
        List<Categoria> categorias = habitacionDao.getCategorias();
        request.setAttribute("categorias", categorias);
      
        habitacionAbmForm.setTipoHabitaciones(tipoHabitaciones);
        habitacionAbmForm.setCategorias(categorias);
        habitacionAbmForm.setEvent("insert");
        return mapping.findForward("beforeInsert");       
    }
    /**
     * Método Struts action method llamado desde habitacionAbm.jsp
     * (habitacionAbm.do", en este caso el parametro event
     * se encuentra especificado en <html:text property="hidden"/>
     */
    public ActionForward insert(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
//        ServicioFacade servicio = (ServicioFacade) SpringUtil.getBean("servicioFacade");
        HabitacionAbmForm habitacionAbmForm = (HabitacionAbmForm) form;
        Habitacion habitacion = servicio.getHabitacion();
        TipoHabitacion tipoHabitacion = servicio.getTipoHabitacion();
        CategoriaDao cd = servicio.getCategoriaDao();
        //Fecha
        Calendar c1 = Calendar.getInstance();       
        String dia=Integer.toString(c1.get(Calendar.DATE));
        String mes=Integer.toString(c1.get(Calendar.MONTH)+1);
        String annio=Integer.toString(c1.get(Calendar.YEAR));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
          String fecha1 = annio+"-"+mes+"-"+dia;
        Date nuevo = (Date) sdf.parse(fecha1);
      
        habitacion.setFechaCreacion(nuevo);
        habitacion.setFechaModificacion(nuevo);
        tipoHabitacion.setTipoHabitacionId(Long.parseLong(habitacionAbmForm.getTipoHabitacionId()));
        habitacion.setTipoHabitacion(tipoHabitacion);
        Categoria c2 = cd.getCategoriaById(BigDecimal.valueOf(Long.parseLong(habitacionAbmForm.getCategoriaId())));
        habitacion.setNumeroHabitacion(Byte.parseByte(habitacionAbmForm.getNumeroHabitacion()));
        habitacion.setCategoria(c2);
        habitacion.setNumeroPiso(Byte.parseByte(habitacionAbmForm.getNumeroPiso()));
        habitacion.setEstado(habitacionAbmForm.getEstado());
        HabitacionDao habitacionDao = servicio.getHabitacionDao();
        habitacionDao.insert(habitacion);
        return mapping.findForward(SUCCESS);
    }

    /**
     * Método Struts action llamado desde
     * habitacionAbm.do?event=beforeUpdate", donde "event" es el valor
     * especificado en <action> elemento : ( <action parameter="event" .../> )
     */
    public ActionForward beforeUpdate(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
//        ServicioFacade servicio = (ServicioFacade) SpringUtil.getBean("servicioFacade");
        String habitacionId = request.getParameter("habitacionId");
        HabitacionDao habitacionDao = servicio.getHabitacionDao();
        Habitacion habitacion = habitacionDao.getHabitacionById(new Long(habitacionId));
        HabitacionAbmForm habitacionAbmForm = (HabitacionAbmForm) form;
        habitacionAbmForm.setCategoriaId(String.valueOf(habitacion.getCategoria().getCategoriaId()));
        habitacionAbmForm.setEstado(habitacion.getEstado());
        habitacionAbmForm.setNumeroHabitacion(String.valueOf(habitacion.getNumeroHabitacion()));
        habitacionAbmForm.setNumeroPiso(String.valueOf(habitacion.getNumeroPiso()));
        List<TipoHabitacion> tipoHabitaciones = habitacionDao.getTipoHabitaciones();
        habitacionAbmForm.setTipoHabitacionId(String.valueOf(habitacion.getTipoHabitacion().getTipoHabitacionId()));
        habitacionAbmForm.setTipoHabitaciones(tipoHabitaciones);
        List<Categoria> categorias = habitacionDao.getCategorias();
        habitacionAbmForm.setCategoriaId(String.valueOf(habitacion.getCategoria().getCategoriaId()));
        habitacionAbmForm.setCategorias(categorias);
        habitacionAbmForm.setFechaCreacion(String.valueOf(habitacion.getFechaCreacion()));
         habitacionAbmForm.setFechaModificacion(String.valueOf(habitacion.getUsuarioModificacion()));
        
        habitacionAbmForm.setEvent("update");
        return mapping.findForward("beforeUpdate");
               
    }

    /**
     * Método Struts action method llamado desde habitacionAbm.jsp
     * (habitacionAbm.do", en este caso el parametro event
     * se encuentra especificado en <html:text property="hidden"/>
     */    
    public ActionForward update(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
//        ServicioFacade servicio = (ServicioFacade) SpringUtil.getBean("servicioFacade");
        HabitacionAbmForm habitacionAbmForm = (HabitacionAbmForm) form;
        Habitacion habitacion = servicio.getHabitacion();
        TipoHabitacion tipoHabitacion = servicio.getTipoHabitacion();
        CategoriaDao cd = servicio.getCategoriaDao();
        tipoHabitacion.setTipoHabitacionId(Long.parseLong(habitacionAbmForm.getTipoHabitacionId()));
        habitacion.setTipoHabitacion(tipoHabitacion);
        Categoria c2 = cd.getCategoriaById(BigDecimal.valueOf(Long.parseLong(habitacionAbmForm.getCategoriaId())));
         Calendar c1 = Calendar.getInstance();       
        String dia=Integer.toString(c1.get(Calendar.DATE));
        String mes=Integer.toString(c1.get(Calendar.MONTH)+1);
        String annio=Integer.toString(c1.get(Calendar.YEAR));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String fecha2 = annio+"-"+mes+"-"+dia;
        Date nuevo = (Date) sdf.parse(fecha2);
       
        habitacion.setFechaModificacion(nuevo);
        habitacion.setFechaCreacion((Date)sdf.parse(habitacionAbmForm.getFechaCreacion()));
        habitacion.setCategoria(c2);
        
        habitacion.setHabitacionId(Long.parseLong(habitacionAbmForm.getHabitacionId()));
        habitacion.setNumeroHabitacion(Byte.parseByte(habitacionAbmForm.getNumeroHabitacion()));
        habitacion.setNumeroPiso(Byte.parseByte(habitacionAbmForm.getNumeroPiso()));
        habitacion.setEstado(habitacionAbmForm.getEstado());
        HabitacionDao habitacionDao = servicio.getHabitacionDao();
        System.out.println(habitacion);
        habitacionDao.update(habitacion);
          
             
        return mapping.findForward(SUCCESS);
    }
    
   
    
     public ActionForward delete(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
         try{
            HabitacionAbmForm baja = (HabitacionAbmForm) form;
//            ServicioFacade servicio = (ServicioFacade) SpringUtil.getBean("servicioFacade");
            HabitacionDao hd = servicio.getHabitacionDao();
            String id = baja.getHabitacionId();
            Habitacion h3 = hd.getHabitacion(Long.parseLong(id));
             hd.delete(h3);          
             return mapping.findForward(SUCCESS);
         }catch(ConstraintViolationException ex){
             return  mapping.findForward(ERROR);
         }
     }
     
//     public void limpiarForm(HabitacionAbmForm abm){
//         abm.setNumeroHabitacion(null);
//         abm.setCategorias(null);
//         abm.setEstado(null);
//         abm.setEvent(null);
//         abm.setNumeroPiso(null);
//         abm.setTipoHabitaciones(null);
//         
//         
//     }

}
